package com.csust.automaticteach.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.csust.automaticteach.model.dto.generateteach.GenerateTeachFileRequest;
import com.csust.automaticteach.model.dto.generateteach.GenerateTeachQueryDTO;
import com.csust.automaticteach.model.entity.GenerateTeach;
import com.baomidou.mybatisplus.extension.service.IService;
import com.csust.automaticteach.model.entity.User;
import com.csust.automaticteach.model.vo.generateteach.GenerateTeachVO;
import com.csust.automaticteach.model.vo.generateteach.UploadReturnVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
* @author 钰玟
* @description 针对表【t_generate_teach(生成教学大纲)】的数据库操作Service
* @createDate 2025-06-24 08:43:29
*/
public interface GenerateTeachService extends IService<GenerateTeach> {
    /**
     * 生成教学大纲 同步实现
     * @param generateTeachFileRequest 上传的本地课程大纲
     * @param loginUser 登录用户
     * @return 生成的教学大纲vo对象
     */
    GenerateTeachVO generateTeachSyn(GenerateTeachFileRequest generateTeachFileRequest, User loginUser);
    /**
     * 生成教学大纲  异步实现 rabbitMQ 实现
     * @param generateTeachFileRequest 上传的本地课程大纲
     * @param loginUser 登录用户
     * @return 生成的教学大纲vo对象
     */
    GenerateTeachVO generateTeachAsy(GenerateTeachFileRequest generateTeachFileRequest, User loginUser);
    /**
     * 拼接prompt
     * @param context 上下文
     * @return  prompt
     */
    String concatPrompt(String context);

    /**
     * 处理更新错误
     * @param generateTeachId 生成教学id
     * @param execMessage 执行信息
     */
    void handleTeachUpdateError(long generateTeachId, String execMessage);

    /**
     * 获取查询包装类
     * @param generateTeachQueryDTO 查询条件
     * @return 查询包装类
     */
    QueryWrapper<GenerateTeach> getGenerateTeachQueryWrapper(GenerateTeachQueryDTO generateTeachQueryDTO);

    /**
     * 获取生成教学列表
     * @param records 记录
     * @return 生成教学列表
     */
    List<GenerateTeachVO> getGenerateTeachVOList(List<GenerateTeach> records);

    /**
     * 获取生成教学视图对象
     * @param generateTeach 实体类
     * @return 视图
     */
    GenerateTeachVO getGenerateTeachVO(GenerateTeach generateTeach);

    /**
     * 上传教学大纲
     * @param file file
     * @param loginUser 当前用户
     * @return
     */
    UploadReturnVO uploadTeachFile(MultipartFile file, User loginUser);
}
